package com.huawei;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 好他妈奇怪：这道题，别人代码提交的时候都没有测试用例：10110111000111110100101100010110，我的代码就有，别人本地代码测试也是会越界的。
 * 一个ip地址为10.0.3.193
 * 每段数字             相对应的二进制数
 * 10                   00001010
 * 0                    00000000
 * 3                    00000011
 * 193                  11000001
 *
 * 组合起来即为：00001010 00000000 00000011 11000001,转换为10进制数就是：167773121，即该IP地址转换后的数字就是它了。
 *
 * 输入：
 * 10.0.3.193
 * 167969729
 * 输出：
 * 167773121
 * 10.3.3.193
 *
 * 分析：
 * 十进制如何转二进制：Integer/Long.toBinaryString(int i)
 * 二进制如何转十进制：Integer/Long.parseInt(res,2)
 * 1. 先判断是不是IP格式的，如果是IP格式，走IP格式函数
 *      ip格式函数：
 *      a.先split，得到4个整数，每个整数换算成二级制，不到八位的补0，拼接成大的二级制，调用Integer.parseInt(res,2),得到结果十进制整数
 *
 * 10110111000111110100101100010110  Long.parseLong 也溢出了。。。
 **/
public class HJ033 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while(scanner.hasNextLine()){
            String input = scanner.nextLine();
            work(input);
        }


    }

    public static void work(String input){
        boolean ipFlag = false;
        if (input.contains(".")) {
            ipFlag = true;
        }

        if(ipFlag){
            String[] split = input.split("\\.");
            //System.out.println(Arrays.toString(split));
            //长的二进制字符串
            String bigBinStr = "";
            for (String s : split) {
                String binStr = Integer.toBinaryString(Integer.parseInt(s));
                //不够8位要在前面补01
                for (int i = binStr.length(); i < 8; i++) {
                    binStr = "0"+binStr;
                }
                bigBinStr += binStr;
            }
            int res = Integer.parseInt(bigBinStr, 2);
            System.out.println(res);
        }else{
            //十进制，转换成二级制字符串，二进制字符串长度不够4*8=32时候，在二进制字符串前面补0直到32个长度，最后每8位截取，得到4个子字符串，子字符串转成4个整数，然后手动拼接
            // ERROR：10110111000111110100101100010110  Long.parseLong 也会溢出
            String bigBinStr = Long.toBinaryString(Long.parseLong(input));
            //System.out.println(bigBinStr);
            //补0
            for (int i = bigBinStr.length(); i < 32; i++) {
                bigBinStr = "0"+bigBinStr;
            }
            //得到4个子字符串，二进制子字符串转成4个整数
            int i1 = Integer.parseInt(bigBinStr.substring(0, 8), 2);
            int i2 = Integer.parseInt(bigBinStr.substring(8, 16), 2);
            int i3 = Integer.parseInt(bigBinStr.substring(16, 24), 2);
            int i4 = Integer.parseInt(bigBinStr.substring(24, 32), 2);
            String res = i1+"."+i2+"."+i3+"."+i4;
            System.out.println(res);

        }


    }
}



//复制别人的代码，能过，带上本地代码跑：10110111000111110100101100010110不能过，这很奇怪，我的代码和代码是差不多的，但是测试用例走的不一样。
//public class Main {
//    public static void main(String[] args) {
//        Scanner scan = new Scanner(System.in);
//        while (scan.hasNext()) {
//            String str = scan.nextLine();
//            // 判断输入是IP地址还是十进制数
//            if (str.contains(".")) {
//                String[] arr = str.split("\\.");
//                long[] ip = new long[arr.length];
//                StringBuilder sb = new StringBuilder();
//                for (int i = 0; i < arr.length; i++) {
//                    ip[i] = Long.parseLong(arr[i]);
//                    String a = Long.toBinaryString(ip[i]);
//                    //转成8位二进制 利用String.format()控制格式
//                    String temp = String.format("%08d", Long.parseLong(a));
//                    sb.append(temp);
//                }
//                long output = Long.parseLong(sb.toString(), 2);
//                System.out.println(output);
//            } else {
//                String binaryChuan = Long.toBinaryString(Long.parseLong(str));
//                int len = binaryChuan.length();
//                StringBuilder sb = new StringBuilder(binaryChuan);
//                // 不足32位的前面补0
//                for (int i = 0; i < 32 - len; i++) {
//                    sb.insert(0, "0");
//                }
//                String fin = sb.toString();
//                long a = Long.valueOf(fin.substring(0, 8), 2);
//                long b = Long.valueOf(fin.substring(8, 16), 2);
//                long c = Long.valueOf(fin.substring(16, 24), 2);
//                long d = Long.valueOf(fin.substring(24, 32), 2);
//                System.out.println(a + "." + b + "." + c + "." + d);
//            }
//        }
//    }
//}


    //public static void main(String[] args) {
    //    Scanner sc = new Scanner(System.in);
    //    while (sc.hasNext()) {
    //        String in = sc.nextLine();
    //        if (in.lastIndexOf('.') != -1) {
    //            String[] sa = in.split("\\.");
    //            long[] a = new long[4];
    //            for (int i = 0; i < 4; i++) a[i] = Long.parseLong(sa[i]);
    //            System.out.println(a[0] << 24 | a[1] << 16 | a[2] << 8 | a[3]);
    //        } else {
    //            long d = Long.parseLong(in);
    //            String out = String.format("%d.%d.%d.%d", (d >> 24) & 0xff, (d >> 16) & 0xff, (d >> 8) & 0xff, d & 0xff);
    //            System.out.println(out);
    //        }
    //    }
    //    sc.close();
    //}